#ifndef ALGORITHME_H
#define ALGORITHME_H
#include <QtCore/qglobal.h>
#if defined(ALGO_LIBRARY)
#  define MY_EXPORT Q_DECL_EXPORT
#else
#  define MY_EXPORT Q_DECL_IMPORT
#endif
#include<QObject>
#include<QWidget>
#include<QString>
#include<QFile>
#include<QList>
#include<QApplication>
#include<QByteArray>
#include<QLabel>
#include<QDir>
#include<QPushButton>
#include<QHBoxLayout>
#include "time.h"              //eh oui, windows ne l'inclut pas par défaut !

using namespace std;

class Algorithme: public QObject
{
public:
        float getTemps();
        void setData(QString message, bool fich, QString file);

    // Fonction qui chiffre le contenu. Le contenu est initialisé grâce à la
    // fonction non virtuelle de Algorithme. Le booléen argument vaut True si
    // les données sont présentées sous forme de ﬁchier, False sinon (entrée
    // clavier).
        virtual void chiffre(bool fich);

    // Fonction qui déchiffre le contenu. Voir les remarques de la fonction ci-dessus
        virtual void dechiffre(bool fich);

    // Fonction qui renvoie, sous la forme d'une liste, les widgets que la
    // plate-forme doit afficher. Ils sont affichés les uns en dessous des autres dans
    // l'ordre
        virtual QList<QWidget *> affiche();

    // Fonction très simple qui renvoie un nom explicite pour l'algorithme
        virtual QString nom();

    // Fonction d'aide qui renvoie le contenu à afficher dans la fenêtre d'aide de
    // l'algorithme. La spécification de cette fonction n'est pas indispensable mais
    // conseillée lors de la définition d'algorithmes hérités
        virtual QString aide();
protected:
        Algorithme();
        float temps;

    // Cette chaîne de caractères contient le texte entré manuellement dans
    // la partie gauche de la plate-forme.
        QString messageIn;

    // Cette chaîne de caractères s'affichera dans la partie droite de la
    // plate-forme. Dans le cas d'une entrée clavier, nous avons choisi d'y
    // mettre le texte chiffré (ou déchiffré), dans le cas d'une entrée
    // fichier, nous avons choisi d'y mettre "sortie dans out_NomAlgo.txt"
        QString messageOut;

    // Ce tableau de bits contient le contenu du fichier entré en paramètre
        QByteArray line;

    // Ce tableau de bits contient le contenu chiffré ou déchiffré d'un fichier
    // donné en paramètre
        QByteArray lineOut;

    // L'utilisateur peut, lorsqu'il utilise l'entrée fichier, donnez un nom de
    // sortie. Ce nom est sauvegardé dans cette chaîne de caractères
        QString fileOut;
};

// Constructeur exportable permettant de récupérer l'algorithme en tant
// qu'objet dans la plate-forme
extern "C" MY_EXPORT Algorithme* maker();

#endif // ALGORITHME_H
